/*
 * Static.h
 *
 *  Created on: 2013. 9. 16.
 *      Author: jjaehuny
 */

#ifndef PROJECTZ_NSTATE_STATIC_H_
#define PROJECTZ_NSTATE_STATIC_H_

#include "../NUtil/Single.h"

#include "Title.h"
#include "MainFriendList.h"
#include "ReadyMainFriendList.h"
#include "CleanUp.h"
#include "WaitReconnect.h"
#include "ReceiptCheckState.h"
#include "MailState.h"
#include "PhysicalChangeState.h"

#include "NWait/WaitLocationRegist.h"
#include "NWait/WaitTradeItemLookup.h"

#include "NWait/WaitItemInfo.h"
#include "NWait/WaitGuildInfo.h"

namespace ProjectZ { namespace NState {

class Static : public NUtil::Single<Static>
{
public:
	Static()
	{
		_title					= new Title;
		_mainFriendList			= new MainFriendList;
		_readyMainFriendList	= new ReadyMainFriendList;
		_cleanUp				= new CleanUp;
		_waitReconnect			= new WaitReconnect;
		_receiptCheckState		= new ReceiptCheckState;
		_mailState				= new MailState;
		_physicalChange			= new PhysicalChangeState;

		_pWaitLocationRegist	= new NWait::WaitLocationRegist;
		_pWaitTradeItemLookup	= new NWait::WaitTradeItemLookup;

		_pWaitItemInfo			= new NWait::WaitItemInfo;
		_pWaitGuildInfo			= new NWait::WaitGuildInfo;
	}

	~Static()
	{
		delete _pWaitItemInfo;
		delete _pWaitLocationRegist;
		delete _waitReconnect;
		delete _cleanUp;
		delete _readyMainFriendList;
		delete _mainFriendList;
		delete _title;
		delete _receiptCheckState;
		delete _pWaitTradeItemLookup;
		delete _mailState;
		delete _physicalChange;
		delete _pWaitGuildInfo;
	}

public:
	Title *				TITLE() { return _title; }
	MainFriendList * 	MAINFRIENDLIST() { return _mainFriendList; }
	CleanUp *			CLEANUP() { return _cleanUp; }
	WaitReconnect *		WAITRECONNECT() { return _waitReconnect; }
	ReceiptCheckState *	RECEIPTCHECKSTATE() { return _receiptCheckState; }
	MailState *			MAILSTATE() { return _mailState; }
	ReadyMainFriendList * READYMAINFRIENDLIST() { return _readyMainFriendList; }

	NWait::WaitLocationRegist *  	WAITLOCATIONREGIST() { return _pWaitLocationRegist; }
	NWait::WaitTradeItemLookup *	WAITTRADEITEMLOOKUP() { return _pWaitTradeItemLookup; }

	NWait::WaitItemInfo *	WAITITEMINFO() { return _pWaitItemInfo; }
	PhysicalChangeState	* PHYSICALCHANGE() { return _physicalChange; }
	NWait::WaitGuildInfo *	WAITGUILDINFO() { return _pWaitGuildInfo; }

private:
	Title *	_title;
	MainFriendList *	_mainFriendList;
	CleanUp *			_cleanUp;
	WaitReconnect *		_waitReconnect;
	ReceiptCheckState * _receiptCheckState;
	MailState *			_mailState;
	ReadyMainFriendList * _readyMainFriendList;
	PhysicalChangeState	* _physicalChange;

	NWait::WaitLocationRegist *		_pWaitLocationRegist;
	NWait::WaitTradeItemLookup *	_pWaitTradeItemLookup;
	NWait::WaitItemInfo *			_pWaitItemInfo;
	NWait::WaitGuildInfo *			_pWaitGuildInfo;
};

} /*NState*/ } /* namespace ProjectZ */

#endif /* PROJECTZ_NSTATE_STATIC_H_ */

